<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /*
  eval() 函数可计算某个字符串，并执行其中的的 JavaScript 代码。
  
  返回通过计算 string 得到的值（如果有的话，无值返回undefined）。
  只接受原始字符串作为参数，如果 string 参数不是原始字符串，那么该方法将不作任何改变地返回。

  如果参数中没有合法的表达式-和语句，则抛出 SyntaxError 异常。

  如果非法调用 eval()，则抛出 EvalError 异常。

  如果传递给 eval() 的 Javascript 代码生成了一个异常，eval() 将把该异常传递给调用者。

    */
    var msg = "hello world";
    eval("alert(msg)"); //"hello world"

    //（1）通过eval()执行的代码包含在该次调用的执行环境中，因此被执行的代码具有与该执行环境相同的作用域链。
    eval("function sayHi() { alert('hi'); }");
    sayHi();//'hi'
    eval("var msg = 'hello world'; ");
    alert(msg); //'hello world'

    //（2）在eval()中创建的任何变量或函数都不会被提升，因为在解析代码的时候，它们被包含在一个字符串中；它们只在eval()执行的时候创建。
  </script>
</body>
</html>